package com.lucky.xyt.modular.system.controller;

import java.util.List;
import java.util.Map;

import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.baomidou.mybatisplus.mapper.SqlRunner;
import com.baomidou.mybatisplus.plugins.Page;
import com.lucky.xyt.core.base.controller.BaseController;
import com.lucky.xyt.core.common.annotion.BussinessLog;
import com.lucky.xyt.core.common.constant.factory.PageFactory;
import com.lucky.xyt.core.common.constant.state.BizLogType;
import com.lucky.xyt.core.support.BeanKit;
import com.lucky.xyt.modular.system.model.OperationLog;
import com.lucky.xyt.modular.system.service.IOperationLogService;
import com.lucky.xyt.modular.system.warpper.LogWarpper;

/**
 * 日志管理的控制器
 *
 * @author fengshuonan
 * @Date 2017年4月5日 19:45:36
 */
@Controller
@RequestMapping("/log")
public class LogController extends BaseController {

	private static String PREFIX = "/system/log/";

	@Autowired
	private IOperationLogService operationLogService;

	/**
	 * 跳转到日志管理的首页
	 */
	@RequestMapping("")
	public String index() {
		return PREFIX + "log.html";
	}

	/**
	 * 查询操作日志列表
	 */
	@SuppressWarnings({ "unchecked", "deprecation" })
	@RequestMapping("/list")
	@RequiresPermissions("/log/list")
	@ResponseBody
	public Object list(@RequestParam(required = false) String beginTime, @RequestParam(required = false) String endTime,
			@RequestParam(required = false) String logName, @RequestParam(required = false) Integer logType) {
		Page<OperationLog> page = new PageFactory<OperationLog>().defaultPage();
		List<Map<String, Object>> result = operationLogService.getOperationLogs(page, beginTime, endTime, logName,
				BizLogType.valueOf(logType), page.getOrderByField(), page.isAsc());
		page.setRecords((List<OperationLog>) new LogWarpper(result).warp());
		return super.packForBT(page);
	}

	/**
	 * 查询操作日志详情
	 */
	@RequestMapping("/detail/{id}")
	@RequiresPermissions("/log/detail")
	@ResponseBody
	public Object detail(@PathVariable Integer id) {
		OperationLog operationLog = operationLogService.selectById(id);
		Map<String, Object> stringObjectMap = BeanKit.beanToMap(operationLog);
		return super.warpObject(new LogWarpper(stringObjectMap));
	}

	/**
	 * 清空日志
	 */
	@BussinessLog(value = "清空业务日志")
	@RequestMapping("/delLog")
	@RequiresPermissions("/log/delLog")
	@ResponseBody
	public Object delLog() {
		SqlRunner.db().delete("delete from sys_operation_log");
		return SUCCESS_TIP;
	}
}
